import type { FormRule, PrimaryTableCol, SelectProps } from 'tdesign-vue-next';
import { Avatar, Space, Tag } from 'tdesign-vue-next';
import { h } from 'vue';

import { t } from '@/locales';

/**
 * 搜索表单项
 */
export const searchParams: SearchParamsProps[] = [
    {
        label: t('pages.sysUser.username'),
        key: 'username',
    },
];

/**
 * 表格列
 */
export const columns: PrimaryTableCol[] = [
    {
        title: t('pages.sysUser.username'),
        ellipsis: true,
        align: 'center',
        colKey: 'username',
    },
    {
        title: t('pages.sysUser.password'),
        ellipsis: true,
        align: 'center',
        colKey: 'password',
    },
    {
        title: t('pages.sysUser.sex'),
        ellipsis: true,
        align: 'center',
        colKey: 'sex',
        cell: (h, { row }) => h(Tag, {}, row.sex == 0 ? '男' : row.sex == 1 ? '女' : '未知'),
    },
    {
        title: t('pages.sysUser.nickname'),
        ellipsis: true,
        align: 'center',
        colKey: 'nickname',
    },
    {
        title: t('pages.sysUser.phone'),
        ellipsis: true,
        align: 'center',
        colKey: 'phone',
    },
    {
        title: t('pages.sysUser.email'),
        ellipsis: true,
        align: 'center',
        colKey: 'email',
    },
    {
        title: t('pages.sysUser.role'),
        ellipsis: true,
        align: 'center',
        colKey: 'role',
        cell: (h, {row}) => h(Space, {direction: 'vertical'}, row.roles.map(i => h(Tag, {key: i.value}, i.label)))
    },
    {
        title: t('pages.sysUser.avatar'),
        ellipsis: true,
        align: 'center',
        colKey: 'avatar',
        cell: (h, { row }) => h(Avatar, { image: row.avatar }),
    },
    {
        title: t('pages.sysUser.remarks'),
        ellipsis: true,
        align: 'center',
        colKey: 'remarks',
    },
];

/**
 * 表单校验规则
 */
export const rules: Record<string, FormRule[]> = {
    username: [{ required: true, message: t('pages.sysUser.required.username'), type: 'error', trigger: 'blur' }],
    password: [{ required: true, message: t('pages.sysUser.required.password'), type: 'error', trigger: 'blur' }],
    email: [{ required: true, message: t('pages.sysUser.required.email'), type: 'error', trigger: 'blur' }],
};

export const sexOptions: SelectProps['options'] = [
    {
        label: t('components.sex.male'),
        value: 0,
    },
    {
        label: t('components.sex.female'),
        value: 1,
    },
    {
        label: t('components.sex.unknown'),
        value: 2,
    },
];
